package com.guli.gulimall.coupon;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * 1、如何使用nacos作为配置中心统一管理配置
 *    1）引入依赖
 *       <dependency>
 *          <groupId>com.alibaba.cloud</groupId>
 *          <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
 *       </dependency>
 *    2）新增配置文件并配置nacos配置中心
 *       /src/main/resources/bootstrap.properties
 *       :
 *       spring.application.name=服务名称
 *       spring.cloud.nacos.config.server-addr=nacos服务器地址 ip:port
 *  2. 需要在nacos 配置中心页面上添加项目的配置，
 *     Data ID: gulimall-coupon.properties
 *     默认规则：应用名称.properties
 *  3. 动态刷新注解
 *    @RefreshScope：动态获取并刷新配置
 *    @Value("${配置项的名称}"):获取到配置
 *  4.细节
 *    1）命名空间：配置隔离
 *      默认:public(保留空间)；默认新增的所有配置都在public空间。
 *      1、基于环境 开发，测试，生产，利用命名空间来做配置隔离
 *          注意：在bootstrap.properties；配置上，需要使用哪个命名空间下的配置
 *          spring.cloud.nacos.config.namespace=f967268e-5b41-4bd5-b1e8-5a63d0ce0269
 *      2、基于每一个微服务之间做配置隔离，。诶有个微服务创建自己的命名空间，自己用自己的命名空间
 *    2）配置集：所有的配置集合叫配置集
 *
 *    3）配置集ID：类似配置文件名
 *      Data Id：类似配置文件名
 *    4)配置分组
 *      默认所有的配置集都属于:DEFAULT_GROUP
 *      每个微服务，创建自己的命名空间，使用配置分组区分环境，dev，prod
 *      注意：在bootstrap.properties；配置上，配置分组，
 *      spring.cloud.nacos.config.group=dev
 *  5、同时配置多个配置集
 *      1）微服务任何配置信息，都可以放在配置中心中
 *      2）只需要在bootstrap.properties说明加载配置中心那些配置文件即可
 *      3）@Value、@ConfigurationProperties 等等
 *      4）以前springboot任何方式从配置文件中获取值都能从配置中心获取，配置中心有的值优先使用配置中心的值
 */
@MapperScan("com.guli.gulimall.coupon.dao")
@SpringBootApplication
@EnableDiscoveryClient
public class GulimallCouponApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallCouponApplication.class, args);
    }

}
